3. 匿名内部类
没有名字的内部类就是匿名内部类。
3.1 匿名内部类特性
1. 匿名内部类总是默认实现某个接口或继承某个抽象类。
2.不能有构造方法,只能有一个实例。
3. 不能定义在任何静态成员、静态方法。
4. 不能是public.protected.private static.
5. 匿名内部类为局部的,所以局部内部类的所有限制都对其有效。
3.2 匿名内部类的使用方式
一、继承式的匿名内部类: 就是new 抽象类。
示例:
package 匿名内部类抽象类练习;
public abstract class Tv {
//打开电视
public abstract void open();
//关闭电视
public abstract void close();
//换台
public abstract void turn();
}
package 匿名内部类抽象类练习;
public class Summer {
public static Tv extendsTv() {
Tv tv = new Tv() {
@Override
public void open() {
System.out.println("打开三星电视...");
}
@Override
public void close() {
System.out.println("关闭三星电视...");
}
@Override
public void turn() {
System.out.println("对三星电视进行换台...");
}
};
//tv.open();
//tv.close();
//tv.turn();
return tv;
}
}
package 匿名内部类抽象类练习;
public class XiaoMi {
public static Tv extendsTv() {
//匿名内部类... 抽象类的实现 ...
Tv tv = new Tv() {
@Override
public void open() {
System.out.println("打开小米电视...");
}
@Override
public void close() {
System.out.println("关闭小米电视...");
}
@Override
public void turn() {
System.out.println("对小米电视进行换台...");
}
};
//tv.open();
//tv.close();
//tv.turn();
return tv;
}
}
package 匿名内部类抽象类练习;
public class Test {
public static void main(String[] args) {
Tv xiaomi = XiaoMi.extendsTv();
xiaomi.open();
xiaomi.turn();
xiaomi.close();
System.out.println("------------------------------");
Tv summer = Summer.extendsTv();
summer.open();
summer.turn();
summer.close();
}
}